<?php

class desktop_mdl_hasrole extends dbeav_model {

    function update($data, $filter = array(), $mustUpdate = null) {
        $c = parent::update($data, $filter);
        
        if ($filter['role_id']) {
            $role_id = array();
            foreach ($this->getList('role_id', $filter) as $r) {
                $role_id[] = $r['role_id'];
            }
        } else {
            $role_id = $filter['role_id'];
        }
        
        if (count($role_id) == 1) {
            $rows = $this->db->select('select action_id from ' . DB_PREFIX . 'base_lnk_acts where role_id in (' . implode(',', $role_id) . ')');
            $in_db = array();
            foreach ($rows as $r) {
                $in_db[] = $r['action_id'];
            }
            $data['actions'] = $data['actions'] ? $data['actions'] : array();
            $to_add = array_diff($data['actions'], $in_db);
            $to_del = array_diff($in_db, $data['actions']);
            
            if (count($to_add) > 0) {
                $sql = 'INSERT INTO `' . DB_PREFIX . 'base_lnk_acts` (`role_id`,`action_id`) VALUES ';
                foreach ($to_add as $action_id) {
                    $actions[] = "({$role_id[0]},$action_id)";
                }
                $sql .= implode($actions, ',') . ';';
                $a = $this->db->exec($sql);
            }
            
            if (count($to_del) > 0) {
                $this->db->exec('delete from ' . DB_PREFIX . 'base_lnk_acts where action_id in (' . implode(',', $to_del) . ') and role_id=' . intval($role_id[0]));
            }
        } else {}
        
        return $c;
    }

    function insert(&$data) {
        $role_id = parent::insert($data);
        if ($role_id && is_array($data['actions'])) {
            $sql = 'INSERT INTO `' . DB_PREFIX . 'base_lnk_acts` (`role_id`,`action_id`) VALUES ';
            foreach ($data['actions'] as $action_id) {
                $actions[] = "($role_id,$action_id)";
            }
            $sql .= implode($actions, ',') . ';';
            $a = $this->db->exec($sql);
        }
        return $role_id;
    }
}
?>
